package exception02;

/**
 * 第一种格式格式:
 *   try{
 *     //第一种可能:try中的代码没有抛出异常,那么会去执行finally中的语句,程序继续向下执行
 *     //第二种可能:try中的代码出现了异常,异常下面的代码不在执行(try中的),接着会去找对应catch处理这个异常,
 *                执行catch中的语句,执行完catch中语句,接着会去执行finally中的语句
 *                finally语句执行完之后,程序继续向下执行
 *   }catch(异常类型 变量名){
 *
 *   }...finally{//finall跟在最后一个catch的末尾
 *      //无论try中是否抛出异常,finally中的语句都会被执行
 *      //我们一般把资源释放语句放在finally中,防止资源无法释放,例如:IO流关闭,数据连接关闭..
 *   }
 *
 *第二种格式:
 *   try{
 *      //第一种可能:try中的代码没有抛出异常,那么会去执行finally中的语句,程序继续向下执行
 *      //第二种可能:try中的代码出现了异常,此时try下面的语句不再执行(try中),接着会去执行finally中的语句
 *                 执行完finally中的语句之后,JVM会去处理这个异常,采用默认处理方式,打印异常信息和异常追踪信息
 *                 最后停止程序
 *
 *   }finally{
 *     //无论try中是否抛出异常,finally中的语句都会被执行
 *   }
 *
 */
public class ExceptionDemo06 {
    public static void main(String[] args)throws Exception{ //main方法这里的throws异常声明是给jvm看的
        //method01();
        try {
            /*int totalPrice = getTotalPrice(3, 20);
            System.out.println(totalPrice);*/

            int totalPrice = getTotalPrice(-3, 20);
            System.out.println(totalPrice);
        }finally {
            System.out.println("finally中的代码被执行");
        }

        System.out.println("程序执行结束");
    }
    /**
     * 文档注释
     *
     * @param price  单价
     * @param amount 数量
     * @return 返回总价
     */
    public static int getTotalPrice(int price, int amount) throws Exception {
        //当他看到这个异常声明就知道需要处理
        if (price < 0) {

            throw new Exception("价格不能为负值" + price);

        }
        return price * amount;
    }
    private static void method01() {
        try {
            /*int totalPrice = getTotalPrice(3, 20);
            System.out.println(totalPrice);*/

            int totalPrice = getTotalPrice(-3, 20);
            System.out.println(totalPrice);
        } catch (Exception e) {
            System.out.println("捕获了Exception异常");
        }finally {
            System.out.println("finally中的代码被执行");
        }

        System.out.println("程序执行结束");
    }


}
